补集计算: B=U-A

问题描述

在做数据处理的时候,根据原论文的蛋白质链下载蛋白质PDB文件,大体上还算正常。但是有的protein的PDB文件在PDB数据库已经不存在了,所以下载后的PDB文件理论上只属于原论文提到的PDB文件的一个子集。由于数据比较大,手动去找会耗费大量的时间,所以为了找出这些不存在的PDB文件,下面写一段代码来实现。

问题转换与实现

首先,将问题转化成一个数学问题。

问题转化:原论文提及的数据集(一个大集合U),现在下载到的只是一个子集合A,目的是求出U中不包含A的子集合(补集):B=U-A.

最终转化为:根据集合U和子集A,计算A的补集B=U-A.

参数:

  • file1:大集合文件U
  • file2: 下载后的一个子集合A
  • outfile:输出文件

代码如下:

compareTwoFile.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/python
#-*- coding: utf-8 -*-
import os
def compareTwoFile(file1,file2,outfile):
with open(outfile,'w') as fo:
fw = []
with open(file1,'r') as fr1:
fr1_con = [each.strip() for each in fr1.readlines()]
with open(file2,'r') as fr2:
fr2_con =[each.strip() for each in fr2.readlines()]
for eachline in fr1_con:
if eachline not in fr2_con:
fw.append(eachline)
fo.write(''.join(fw))
if __name__=="__main__":
file1 = os.sys.argv[1]
file2 = os.sys.argv[2]
outfile = os.sys.argv[3]
compareTwoFile(file1,file2,outfile)

Test sample:

1
2
3
4
python compareTwoFile.py \
/ifs/home/liudiwei/DNA_BP/_data/Exp_DBPI/train_set.protein \
/ifs/home/liudiwei/DNA_BP/_data/Exp_DBPI/pdb_trainset.txt \
/ifs/home/liudiwei/DNA_BP/_data/Exp_DBPI/compare.result

file1和file2的top10格式:

1A02
1A0A
1A3Q
1A53
1A8E
1A8P
1A8Y
1AAC    
1ABE
1AC5